package com.shijie99.paper.manage.service.imp;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.shijie99.paper.manage.dao.SyUserMapper;
import com.shijie99.paper.manage.pojo.SyUser;
import com.shijie99.paper.manage.service.SyUserService;
import com.shijie99.paper.manage.util.Constant;

@Service
public class SyUserServiceImpl implements SyUserService {
	
	private static Logger logger = Logger.getLogger(SyUserServiceImpl.class);
	@Autowired
	private SyUserMapper syUserMapper;	
	@Override
	public SyUser queryUserByName(String username) {
		SyUser user = syUserMapper.queryUserByName(username,true);
		return user;
	}
	@Override
	@Transactional(rollbackFor=Exception.class)
	public void addUser(SyUser user,Map<String,Object> map)throws Exception {
		List<Integer> list = user.getRoleIdList();
		if(list==null || list.size()==0){
			map.put(Constant.KEY_STATUS, Constant.STATUS_FAIL);
			map.put(Constant.KEY_MSG, "用户无角色信息，无法创建用户");
			return ;
		}else{
			//超级管理员角色用户无类型
			for (Integer roleId : list) {
				if(roleId==1){
					user.setType("");
					break;
				}
			}
			
		}
		try{
			SyUser oldUser = syUserMapper.queryUserByName(user.getUsername(),false);
			if(oldUser!=null){
				map.put(Constant.KEY_STATUS, Constant.STATUS_FAIL);
				map.put(Constant.KEY_MSG, "输入的登录帐号已存在，请重新输入！");
				return ;
			}
			//先保存用户，获取用户id
			syUserMapper.addSyUser(user);
			Integer id = user.getId();
			//再保存对应信息
			syUserMapper.addUserRole(id, list);
			map.put(Constant.KEY_STATUS, Constant.STATUS_SUCC);
			map.put(Constant.KEY_MSG, "新增用户信息成功，继续添加请填写，不再添加请退出。");
		}catch (Exception e) {
			logger.error("保存用户信息出错",e);
			map.put(Constant.KEY_STATUS, Constant.STATUS_ERROR);
			map.put(Constant.KEY_MSG, "保存用户信息时出现错误，请找管理人员解决!");
			throw e;
		}
	}
	@Override
	@Transactional(rollbackFor=Exception.class)
	public void delUser(String ids,Map<String,Object> map)throws Exception {
		List<Integer> idList = new ArrayList<Integer>();
		if(StringUtils.isNotBlank(ids)){
			for(String uid:ids.split(",")){
				idList.add(Integer.parseInt(uid));
			}
		}else{
			map.put(Constant.KEY_STATUS, Constant.STATUS_FAIL);
			map.put(Constant.KEY_MSG, "删除用户信息失败,请求删除的用户为空");
			return ;
		}
		
		try{
			int count = syUserMapper.delUserRole(idList);
			if(count>0){
				count = syUserMapper.delUser(idList);
				if(count>0){
					if(count==idList.size()){
						map.put(Constant.KEY_STATUS, Constant.STATUS_SUCC);
						map.put(Constant.KEY_MSG, "删除用户信息成功，删除用户："+count+"个");
					}else{
						map.put(Constant.KEY_STATUS, Constant.STATUS_FAIL);
						map.put(Constant.KEY_MSG, "部分删除用户信息成功，删除用户："+count+"个");
					}
				}else{
					map.put(Constant.KEY_STATUS, Constant.STATUS_FAIL);
					map.put(Constant.KEY_MSG, "删除用户信息失败");
				}
			}else{
				map.put(Constant.KEY_STATUS, Constant.STATUS_FAIL);
				map.put(Constant.KEY_MSG, "删除用户信息时没有找到对应的角色信息，删除失败");
			}
		}catch (Exception e) {
			logger.error("删除用户信息出错",e);
			map.put(Constant.KEY_STATUS, Constant.STATUS_ERROR);
			map.put(Constant.KEY_MSG, "删除用户信息时出现错误，请找管理人员解决!");
			throw e;
		}
	}
	@Override
	@Transactional(rollbackFor=Exception.class)
	public void editUser(SyUser user, Map<String, Object> result) throws Exception {
		List<Integer> idList = user.getRoleIdList();
		if(idList==null || idList.size()==0){
			result.put(Constant.KEY_STATUS, Constant.STATUS_FAIL);
			result.put(Constant.KEY_MSG, "编辑用户信息失败,编辑后用户角色没有赋值，请检查");
			return ;
		}
		try{
			//先移除原始的用户-角色关系
			syUserMapper.delUserRoleByUid(user.getId());
			//修改用户信息
			syUserMapper.editUser(user);
			//添加新的用户-角色信息
			syUserMapper.addUserRole(user.getId(), idList);
			result.put(Constant.KEY_STATUS, Constant.STATUS_SUCC);
			result.put(Constant.KEY_MSG, "编辑用户信息成功");
		}catch (Exception e) {
			logger.error("编辑用户信息出错",e);
			result.put(Constant.KEY_STATUS, Constant.STATUS_ERROR);
			result.put(Constant.KEY_MSG, "编辑用户信息时出现错误，请找管理人员解决!");
			throw e;
		}
		
		
	}
	
	@Override
	public SyUser queryUserById(Integer id) {
		return syUserMapper.queryUserById(id);
	}
	@Override
	public List<SyUser> queryUserBynameOrnickName(String querytype,
			String name, boolean isSuper) {
		// TODO Auto-generated method stub
		return null;
	}
}
